import axios from 'axios'

// 配置axios基础URL
const API_BASE_URL = 'http://localhost:8080/api'

/**
 * 使用 fetch + ReadableStream 方式调用聊天接口（SSE流式响应，POST请求）
 * @param {number} memoryId 聊天室ID
 * @param {string} message 用户消息
 * @param {Function} onMessage 接收消息的回调函数
 * @param {Function} onError 错误处理回调函数
 * @param {Function} onClose 连接关闭回调函数
 * @returns {AbortController} 返回 AbortController 对象，用于手动关闭连接
 */
export function chatWithSSE(memoryId, message, onMessage, onError, onClose) {
    const controller = new AbortController();

    fetch(`${API_BASE_URL}/ai/chat`, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Accept': 'text/event-stream'
        },
        body: JSON.stringify({ memoryId, message }),
        signal: controller.signal
    }).then(response => {
        if (!response.ok) throw new Error('网络响应失败');
        const reader = response.body.getReader();
        const decoder = new TextDecoder('utf-8');
        let buffer = '';

        function read() {
            reader.read().then(({ done, value }) => {
                if (done) {
                    onClose && onClose();
                    return;
                }
                buffer += decoder.decode(value, { stream: true });
                // 解析 SSE 格式
                const lines = buffer.split('\n');
                buffer = lines.pop(); // 保留未完整的一行
                for (const line of lines) {
                    if (line.startsWith('data:')) {
                        const data = line.replace(/^data:\s*/, '');
                        if (data && data.trim() !== '') {
                            onMessage(data);
                        }
                    }
                }
                read();
            }).catch(error => {
                onError && onError(error);
                onClose && onClose();
            });
        }
        read();
    }).catch(error => {
        onError && onError(error);
        onClose && onClose();
    });

    return controller;
}

/**
 * 检查后端服务是否可用
 * @returns {Promise<boolean>} 返回服务是否可用
 */
export async function checkServiceHealth() {
    try {
        const response = await axios.get(`${API_BASE_URL}/health`, {
            timeout: 5000
        })
        return response.status === 200
    } catch (error) {
        console.error('服务健康检查失败:', error)
        return false
    }
} 